/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package caintra.Sapra.Pantalla.Dispersion;

import caintra.Sapra.Internacional.DBManager;
import caintra.Sapra.Model.Practicante;
import caintra.Sapra.Model.PrefacturaCaintra;
import caintra.Sapra.Model.PrefacturaDetalle;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.sapra.dao.Banco;
import org.sapra.dao.BanorteCuentas;

/**
 *
 * @author Luiz
 */
public class DispersionQuery {

    SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
    String sql="";

    public DispersionQuery() {
    }


    public List<PrefacturaCaintra> empresas_autorizada(Date fecha_pago,int id_banco){
        List<PrefacturaCaintra> lista;
        try {
            sql="SELECT pc.*,getNetoEmpresa(pc.prefacturaId) AS neto_total  FROM prefactura_caintra pc"
                    + " INNER JOIN calendariofacturacionpracticantes c "
                    + " ON pc.periodoId=c.calendarioFacturacionPracticantesId "
                    + " INNER JOIN empresa e "
                    + " ON c.fk_empresaId=e.empresaId "
                    + " WHERE c.dia_pago='"+format.format(fecha_pago)+"' "
                    + " AND e.fk_bancoId="+id_banco
                    + " ORDER BY pc.razon_empresa ASC";
            lista=DBManager.getQuery(PrefacturaCaintra.class,sql);
        } catch (Exception e) {
            return null;
        }
        return lista;

    }

    public List<Banco> bancos_disponibles(){
        List<Banco> lista;
        try {
            sql="select * from banco";
            lista=DBManager.getQuery(Banco.class,sql);
        } catch (Exception e) {
            return null;
        }
        return lista;

    }

    public List<PrefacturaDetalle> practicante_dispersion(ArrayList<PrefacturaCaintra> facturas){
        sql="select pd.*,getNacimiento(practicante_Id) AS fec_nacimiento from prefactura_detalle pd WHERE ";
        PrefacturaCaintra pf;
        List<PrefacturaDetalle> lista_detalle;
        try {
            if(facturas == null || facturas.isEmpty())
                    return null;
            for(int i=0;i<facturas.size();i++){
                pf=(PrefacturaCaintra)facturas.get(i);
                sql+= " fk_prefacturaId="+pf.getPrefacturaId();
                if((i+1)<facturas.size())
                    sql+=" OR ";
            }
            sql+=" order by fk_prefacturaId desc";
            lista_detalle=DBManager.getQuery(PrefacturaDetalle.class,sql);

        } catch (Exception e) {
            return null;
        }
        return lista_detalle;

    }
    public List<BanorteCuentas> getCuenta(int opc,String num) {
        List<BanorteCuentas> resp = null;
        sql = "SELECT bc.*,p.nombre,p.paterno,p.materno,p.fec_nacimiento FROM banorte_cuentas bc "
                + " INNER JOIN practicante p "
                + " ON bc.fk_practicanteId=p.practicanteId ";
        if(opc==0)
            sql += " ORDER BY nombre";
        else
            sql += " where numCuenta='"+num+"'";

        try {
            // Busca las Universidades
            resp = DBManager.getQuery(BanorteCuentas.class,sql);

        } catch (Exception ex) {
            Logger.getLogger(BanorteCuentas.class.getName()).log(Level.SEVERE, null, ex);
        }

        return resp;
    }

    public List<BanorteCuentas> getPract_Cuenta(PrefacturaDetalle p) {
        List<BanorteCuentas> resp = null;
        sql = "SELECT p.practicanteId AS fk_practicanteId,bc.numCuenta AS numCuenta  FROM banorte_cuentas bc "
                + " INNER JOIN practicante p "
                + " ON bc.fk_practicanteId=p.practicanteId "
                + " WHERE p.nombre='"+p.getNombre().trim()+"' "
                + " AND p.paterno='"+p.getPaterno().trim()+"' AND p.materno='"+p.getMaterno().trim()+"' ";

        try {
            // Busca las Universidades
            resp = DBManager.getQuery(BanorteCuentas.class,sql);

        } catch (Exception ex) {
            Logger.getLogger(BanorteCuentas.class.getName()).log(Level.SEVERE, null, ex);
        }

        return resp;
    }


    public boolean actualizaCuenta(String cuenta,int practicante_Id){

        int res=-1;
        sql="UPDATE prefactura_detalle set cuenta='"+cuenta+"' WHERE practicante_Id="+practicante_Id;
        try {
            res=DBManager.Update(sql);
            if(res <=0)
                return false;
            else
                return true;
        } catch (Exception e) {
            return false;
        }
    }


    public boolean actualizaTarjeta(String tarjeta,int practicante_Id){

        int res=-1;
        sql="UPDATE banorte_cuentas set numTarjeta='"+tarjeta+"' WHERE fk_practicanteId"+practicante_Id;
        try {
            res=DBManager.Update(sql);
            if(res <=0)
                return false;
            else
                return true;
        } catch (Exception e) {
            return false;
        }

    }
    public boolean actualizaCuenta(List<BanorteCuentas> lista,String numcuenta,int periodoId){
        BanorteCuentas p;
        int res=-1;
        String sql2="";
        sql="UPDATE banorte_cuentas set numCuenta='"+numcuenta+"' WHERE";
        sql2="UPDATE prefactura_detalle pd set cuenta='"+numcuenta+"' WHERE";
        try {
            if(lista.isEmpty())
                return false;
            for(int i=0;i<lista.size();i++){
                p=(BanorteCuentas)lista.get(i);
                sql+=" fk_practicanteId='"+p.getFk_practicanteId()+"'";
                sql2+=" pd.practicante_Id='"+p.getFk_practicanteId()+"'";
                if((i+1)<lista.size()){
                    sql+=" OR ";
                    sql2+=" OR ";
                }

            }
            sql2 += " AND ( (select periodoId from prefactura_caintra where prefacturaId=pd.fk_prefacturaId)>="+periodoId+" )";
            res=DBManager.Update(sql);
            res=DBManager.Update(sql2);
            if(res < 0)
                return false;
            else
                return true;
        } catch (Exception e) {
            return false;
        }

    }


}
